package com.itcam.project.mq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * @author : Cammy.Wu
 * Description : 
 */

/**
 * 单生产者类，用于向 RabbitMQ 队列发送消息
 */
public class SingleProducer {

    // 定义要发送消息的队列名称
    private final static String QUEUE_NAME = "hello";

    /**
     * 程序入口，用于启动消息发送流程
     *
     * @param args 命令行参数
     * @throws IOException      当创建连接、通道或发布消息时发生 I/O 错误
     * @throws TimeoutException 当创建连接或通道超时
     */
    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建 RabbitMQ 连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置 RabbitMQ 服务器的主机地址
        factory.setHost("localhost");
        // 使用 try-with-resources 语句创建连接和通道，确保资源自动关闭
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            // 声明队列，如果队列不存在则创建
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            // queueName:消息队列名
            // durabale:消息队列重启后，消息是否丢失
            // exclusive:是否只允许当前这个创建消息队列的连接操作消息队列
            // autoDelete:没有人用队列后，是否要删除队列
            // arguments:

            // 定义要发送的消息内容
            String message = "Hello World!";
            // 向指定队列发布消息
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
            // 打印发送成功的消息
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

